﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

using SIAKADCORE.Helpers;
using SIAKADCORE.Models;
using System.Data;

namespace SIAKADCORE.Controllers
{
    /// <summary>
    /// Kelas TabelRController
    /// </summary>
    public static class TabelRController
    {
        /// <summary>
        /// Method untuk menambahkan entri TabelR
        /// </summary>
        /// <param name="TabelR">TabelR tabelR.<\param>
        /// <returns>True ketika menambahkan entri dan sebaliknya.</returns>

        public static bool Tambah(TabelR tabelR)
        {
            string queryString = string.Format("INSERT INTO {0} ({1}, {2}) VALUES ('{3}','{4}')",
                TabelR.TableName, TabelR.ColumnNameIdTabelR, TabelR.ColumnNameJumlahSampel, tabelR.IdTabelR, tabelR.JumlahSampel);
            return SQLHelper.Instance.ExecuteNonQuery(queryString);
        }
        /// <summary>
        /// Method untuk menghapus entri TabelR
        /// </summary>
        /// <param name="idTabelR">IdTabelR yang akan diubah</param>
        /// <param name="TabelR">TabelR tabelR</param>
        /// <returns>True ketika sukses mengubah entri dan sebaliknya.</returns>
        public static bool Ubah(string idTabelR, TabelR tabelR)
        {
            string queryString = string.Format("UPDATE {0} SET {1} = '{2}', {3} = '{4}' WHERE {1} = '{5}'",
                TabelR.TableName, TabelR.ColumnNameIdTabelR, tabelR.IdTabelR,
                TabelR.ColumnNameJumlahSampel, tabelR.JumlahSampel, idTabelR);
            return SQLHelper.Instance.ExecuteNonQuery(queryString);
        }
        /// <summary>
        /// Method untuk menghapus entri tahun
        /// </summary>
        /// <param name="idTabelR"<IdTabelR yang akan dihapus.</param>
        /// <returns> True ketika sukses menghapus entri dan sebaliknya.</returns>
        public static bool Hapus(string idTabelR)
        {
            string queryString = string.Format("DELETE FROM {0} WHERE {1} = '{2}'",
                TabelR.TableName, TabelR.ColumnNameIdTabelR, idTabelR);
            return SQLHelper.Instance.ExecuteNonQuery(queryString);
        }
        /// <summary>
        /// Method untuk mendapatkan hasil query dari TabelR
        /// </summary>
        /// <param name="dataset">Dataset keluaran yng berisi hasil query</param>
        /// <returns></returns> True ketika sukses meng-quey dan sebaliknya.</returns>
        public static bool GetTabel(out DataSet dataset)
        {
            string queryString = string.Format("SELECT {0}, {1} FROM {2})",
                TabelR.ColumnNameIdTabelR, TabelR.ColumnNameJumlahSampel, TabelR.TableName);
            return SQLHelper.Instance.ExecuteReader(queryString, out dataset);
        }
        /// <summary>
        /// Method untuk mendapatkan hasil query dari tabel TabelR
        /// </summary>
        /// <param name="dataset">Dataset keluaran yang berisi hasil query</param>
        /// <param name="customQueryString">Kustomisasi query.</param>
        /// <returns>True ketika sukses meng-query dan sebaliknya</returns>
        public static bool GetTabel(out DataSet dataset, string customQueryString)
        {
            return SQLHelper.Instance.ExecuteReader(customQueryString, out dataset);
        }

        /// <summary>
        /// Method untuk mendapatkan idTabelR. Digunakan pada saat memasukan entri baru
        /// </summary>
        /// <returns> string kosong ketika terjadi error atau idTabelR baru </returns>
        public static string GetID()
        {
            var dataset = new DataSet();
            bool isQueyAccomplished = GetTabel(out dataset);
            if (!isQueyAccomplished) return string.Empty;

            return SQLHelper.Instance.GetID(TabelR.IdPrefix, TabelR.IdLength, ref dataset);
        }
        /// <summary>
        /// Method untuk mengecek ada tidaknya idTabelR dalam tabel
        /// </summary>
        /// <para name="idTabelR">idTabelR yang akan dicek</para>
        /// <returns>True ketika idTabelR telah terdapat dalam tabel</returns>
        public static bool Exist(string idTabelR)
        {
            var dataset = new DataSet();
            string queryString = string.Format("SELECT {0}, {1} FROM {2} WHERE {0} = '{3}'",
                TabelR.ColumnNameIdTabelR, TabelR.ColumnNameJumlahSampel,
                TabelR.TableName, idTabelR);
            bool isSuccess = GetTabel(out dataset, queryString);
            if (!isSuccess)
            {
                return false;
            }
            else
            {
                return dataset.Tables[0].Rows.Count == 1;
            }
        }
    }
}

